# 作业：
# 整理字符串、列表、字典、元组、集合可变和不可变的数据结构,背
# 1、定义两个字典,键值任意,把两个字典合并在一起,组成一个新字典
"""
dict1 = {"name":"suki","age":19}
dict2 = {"address":"ShenYang"}
dict1.update(dict2)
print(dict1)
"""

# 2、定义两个列表,将两个列表合并
"""
list1 = [11,22,33]
list2 = [44,55,66]
list1.extend(list2)
print(list1)
"""

# 3、定义一个集合,包含2,3,4,5,7元素,判断元素12在不在集合中,用分支语句打印不同结果； 判断元素3在不在集合中,打印结果
"""
set1 = {2,3,4,5,7}
if 12 not in set1:
    print("12不在集合中")
else:
    print("12在集合中")
if 3 not in set1:
    print("3不在集合中")
else:
    print("3在集合中")
"""

# 4、让用户输入账号密码,去除账号密码前后无用的空格,然后判断账号是不是admin,密码是不是123456,如果都相同显示登录成功,否则显示登录失败
"""
name = input("请输入用户名称：").strip()
pwd = input("请输入用户密码：").strip()
if name == "admin" and pwd =='123456':
    print("登录成功！")
else:
    print("登录失败，账号或者密码错误！")
"""

# 5、实现用户输入用户名和密码,当用户名为 seven 或 alex 且 密码为 123 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次
"""
for i in range(3):
    user = input("请输入用户名称：")
    password = input("请输入密码：")
    if (user == "seven" or user == 'alex') and password == '123':
        print("登录成功！")
        break
    else:
        print("账号或者密码错误！")
"""
# 6、用程序计算100以内有多少个3的整数倍数字
"""
count = 0
for i in range(1,101):
    if i%3==0:
        count +=1
print(f"用程序计算100以内有：{count}个3的整数倍数字")
"""

# 7、实现判断用户输入的内容中是否有c,要求最多输入三次
"""
for i in range(3):
    result = input("请输入内容：")
    if "c" in result:
        print("包含c")
        break
    else:
        print("不包含c")
"""
# 8、让用户输入个人基本信息,包括 姓名、电话、住址、年龄,通过字典保存用户的数据信息,当用户输入q的时候,结束输入
# 结束输入后,打印显示全部的用户名,并要求选择一个名称
# 然后打印输出这个用户的全部信息,输出信息的格式：用户 xxx,电话是xxx,地址是xxx,年龄是xxx
"""
result = {}     # 收集全部的信息
while True:
    name = input("请输入用户姓名：")
    if name == 'q':
        print("停止收集")
        break
    phone = input("请输入电话：")
    if phone == 'q':
        print("停止收集")
        break
    address = input("请输入住址：")
    if address == 'q':
        print("停止收集")
        break
    age = input("请输入年龄：")
    if age == 'q':
        print("停止收集")
        break
    result[name] = {"电话":phone,"住址":address,"年龄":age}
    # {"张三":{"电话":"1797767621","住址":"辽宁沈阳","年龄":19}}
print("展示全部的个人信息：\n")
print(result)
name = input("请输入你要查询的姓名：")
if name in result:
    print(f"您当前查询的姓名为：{name}，电话是：{result[name]['电话']}，住址是：{result[name]['住址']}，年龄是：{result[name]['年龄']}")
"""
"""
布尔值的几种表现：
1、True、False
2、数字布尔值：0是假的，除了0以外都是真的
3、字符串布尔值：空字符串是假的，其他都是真的
4、空的元组是假的，其他有内容都是真的
5、空的列表是假的，其他有内容都是真的
...

"""
# 9、图书管理系统
# 支持选项,选择功能
# 图书管理系统：
# 1.添加图书
# 2.删除图书
# 3.修改图书
# 4.查询图书
# 5.显示所有图书
# 6.退出操作
"""
book_dict = {}
while True:
    print("欢迎来到图书管理系统！")
    print("功能选项：")
    print("①添加图书")
    print("②删除图书")
    print("③修改图书")
    print("④查询图书")
    print("⑤显示所有图书")
    print("⑥退出操作")
    r = input("请输入您要选择的序号：")
    if r =='1':
        book_name = input("请输入图书名称：")
        book_zuozhe = input("请输入图书作者：")
        book_createTime = input("请输入图书创建时间：")
        if book_name not in book_dict:
            book_dict[book_name] = {"图书作者":book_zuozhe,'图书创建时间':book_createTime}
            print("添加图书成功！图书为：%s"%book_name)
        else:
            print("%s已经存在了，添加失败！"%book_name)
        pass
    elif r == '2':
        book_name = input("请输入要删除的图书名称：")
        if book_name in book_dict:
            book_dict.pop(book_name)
            print(f"图书：{book_name}删除成功！")
        else:
            print("%s图书不存在！删除失败！"%book_name)
    elif r == '3':
        old_book_name = input("请输入您要修改的图书名称：")
        if old_book_name in book_dict:
            new_book_name = input("请输入您要新的图书名称：")
            book_zuozhe = input("请输入图书作者：")
            book_createTime = input("请输入图书创建时间：")
            # 先删除掉原来的老的图书
            book_dict.pop(old_book_name)
            # 再去增加新的图书
            book_dict[new_book_name] = {"图书作者": book_zuozhe, '图书创建时间': book_createTime}
            print("修改图书成功！图书名字原来是：%s，修改后为：%s"%(old_book_name,new_book_name))
    elif r == '4':
        book_name = input("请您输入要查询图书名称：")
        if book_name in book_dict:
            print(f"当前您要查询的图书名称为：{book_name}，图书作者是：{book_dict[book_name]['图书作者']}，图书创建时间是：{book_dict[book_name]['图书创建时间']}")
    elif r == '5':
        if book_dict:       # 判断book_dict的布尔值，有没有图书，如果有图书则进行遍历
            # 通过枚举值来进行遍历
            for index,value in enumerate(book_dict):
                print(f"当前第{index+1}的图书，图书名称是：{value}，图书作者是：{book_dict[value]['图书作者']}，图书创建时间是：{book_dict[value]['图书创建时间']}")
        else:       # 反之，没有任何的图书信息，查询是失败的
            print(f"当前您没有任何的图书信息！查询失败！")
    elif r == '6':
        print("欢迎您下次光临！")
        print("再见！")
        break
        pass
"""
# 10、预设一个 0~9 之间的整数,让用户猜一猜并输入所猜的数,如果大于预设的数,显示“太大” ；小于预设的数,显示“太小” ,如此循环,直至猜中该数,显示“恭喜！你猜中了！ ”（使用random模块）
"""
from random import randint
ran_num = randint(0,9)
while True:
    num = int(input("请输入您本次要猜的数字："))
    if num < ran_num:
        print("太小！")
    elif num > ran_num:
        print("太大！")
    elif num == ran_num:
        print("恭喜！你猜中了！")
        break
"""
# 11、用户分别从键盘输入4个整数和3个整数组成两个列表list1和list2,将列表list2合并到list1中,并在list1末尾再添加两个数字90和100,然后对list1降序排列,最后输出最终的列表list1
"""
list1 = []
for i in range(4):
    num = int(input("请输入整数"))
    list1.append(num)
list2 = []
for i in range(3):
    num = int(input("请输入整数"))
    list2.append(num)
list1.extend(list2)     # 合并列表方法
list1.append(90)        # 末尾追加一个内容值
list1.append(100)
list1.sort(reverse=True)        # 降序排列
print(list1)
"""
# 12、最后一个单词的长度
# 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。
# 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串
"""
s = "asd qwe asd qweasd qweasd"
print(len(s.split(' ')[-1]))
"""
"""
s.split(" ")：按照空格进行分割，最终变成：['asd','qwe','asd','qweasd','qweasd']
[-1]：取出最后一个字符串： qweasd
len(s.split("" )[-1])：计算的就是qweasd的长度，结果为6
"""
# 13、编写一个程序,要求用户输入一个字符串,并将其反转输出
"""
string = input("请输入一个字符串：")[::-1]
# [::-1]，倒序
print(string)
"""
# 14、编写一个程序,要求用户输入一个整数,判断它是奇数还是偶数,并输出结果
"""
num = int(input("请输入一个整数："))
if num%2==0:
    print(f"{num}是偶数")
else:
    print(f"{num}是奇数")
"""
# 15、编写一个程序,计算并输出 1 到 100 之间所有能被 7 整除但不能被 5 整除的数的和：sum+=i
# 计算并输出 1 到 100 之间所有能被 7 整除但不能被 5 整除的数量，sum+=1
"""
sum = 0
for i in range(1,101):
    if i%7==0 and i%5!=0:
        sum += i
print(f"计算并输出 1 到 100 之间所有能被 7 整除但不能被 5 整除的数的和：{sum}")        
"""
# 16、输入任意三个数,用if语句编写求出其中最小值的程序
"""
num1 = int(input("请输入第一个数字"))
num2 = int(input("请输入第二个数字"))
num3 = int(input("请输入第三个数字"))
min = num1
if min > num2:
    min = num2
if min > num3:
    min = num3
print(f"输入任意三个数,用if语句编写求出其中最小值的程序:{min}")
"""
# 17、两数之和
# 给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,
# 并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案
nums = [1,2,44,55,3]
target = 5
result = []
for i in range(len(nums)):
    for j in range(len(nums)-1):
        if nums[i] + nums[j] == target:
            result.extend([i,j])

print(f"对应目标值的索引位置是：{set(result)}")


# 18、listinfo = [133, 88, 24, 33, 232, 44, 11, 44],取出列表小于100,且为偶数的数
listinfo = [133, 88, 24, 33, 232, 44, 11, 44]
result = []
for i in listinfo:
    if i%2==0 and i<100:
        result.append(i)
print(f"取出列表小于100,且为偶数的数:{result}")

# 19、从键盘上输入任意一个整数,输出这个整数是几位数
num = input("请输入数字：")
print(f"当前输入的是：{len(num)}位数字")
# 20、定义一个字典包含“name”、“age”两个key,对应的值为“韩梅梅”, 33,
#  将“name”对应的value值改为“韩涛”
# 添加新的键“sex”,值为“男”
#  将“age”键值对删除
dict_info = {"name":"韩梅梅","age":33}
dict_info['name'] = '韩涛'
dict_info['sex'] = '男'
dict_info.pop('age')
print(dict_info)

# 21、编写程序,定义一个列表,通过索引打印出列表中第2个值,删除列表中的第3值
list1 = [11,22,33]
# 1. 通过索引打印出列表中第2个值
print(list1[1])
# 2. 删除列表中的第3值
list1.pop(2)